package beans;


import excessoes.EncryptorException;
import excessoes.FabricaDAOException;
import fabricas.PropertiesFabrica;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import util.ContextoUtil;
import util.EncriptaSenha;
import util.FacesUtil;

/**
 *
 * @author marcelo
 */
@ManagedBean(name="configuracaoBean")
@RequestScoped
public class ConfiguracaoBean implements Serializable
{
    private static final long serialVersionUID = 2332725166843285226L;
    private final String ARQUIVO = FacesUtil.getServletContext().getRealPath("/WEB-INF/sispac.properties");
    private Properties propriedades;
    private String termo;
    private String porta;
    private String servidorSmtp;
    private String usuarioEmail;
    private String senhaEmail;
    private String remetente;
    private String nomeRemetente;
    private String tls;
    private String ssl;
    private String avisos;
    private String nomeOM;
    private String siglaOM;
    private String enderecoOM;
    private String nomeSecaoTI;
    private String telTI;
    private String nomeSecaoSTS;
    private String enderecoSTS;
    private String telSTS;
    private String seqNup;
    private String siglaNup;
    private String anoNup;
    private String seqNupHap;
    private String siglaNupHap;
    private String anoNupHap;
    private EncriptaSenha encriptaSenha; 
    private Boolean habilitaBotaoSalvar;
    
    public ConfiguracaoBean() throws FabricaDAOException {
        this.encriptaSenha = new EncriptaSenha();
        this.propriedades = PropertiesFabrica.lePropertiesJsf(ARQUIVO);
    }
    
    public void salvarNupHap() throws FabricaDAOException, EncryptorException, UnsupportedEncodingException
    {
        try
        {
            this.propriedades.setProperty("SEQUENCIALNUPHAP", this.seqNupHap);
            this.propriedades.setProperty("SIGLANUPHAP", this.siglaNupHap.toUpperCase().trim());
            this.propriedades.setProperty("ANONUPHAP", this.anoNupHap);

            PropertiesFabrica.salvaPropertiesJsf(this.propriedades, ARQUIVO);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro alterado com sucesso!", ""));
        }
        catch(Exception e) {
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível alterar os dados! Erro: "+e.getMessage(),""));
        }
    }

    public void salvarNup() throws FabricaDAOException, EncryptorException, UnsupportedEncodingException
    {
        try
        {
            this.propriedades.setProperty("SEQUENCIALNUP", this.seqNup);
            this.propriedades.setProperty("SIGLANUP", this.siglaNup.toUpperCase().trim());
            this.propriedades.setProperty("ANONUP", this.anoNup);

            PropertiesFabrica.salvaPropertiesJsf(this.propriedades, ARQUIVO);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro alterado com sucesso!", ""));
        }
        catch(Exception e) {
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível alterar os dados! Erro: "+e.getMessage(),""));
        }
    }
        
    public void salvarServidorSmtp() throws FabricaDAOException, EncryptorException, UnsupportedEncodingException
    {
        //String senhaCriptografada = Encrypter.encriptar(Encrypter.CHAVE, this.senhaEmail);
        String senhaCriptografada = this.encriptaSenha.cifrar(this.senhaEmail);
        
        try
        {
            this.propriedades.setProperty("NOMEREMETENTE", this.nomeRemetente);
            this.propriedades.setProperty("REMETENTE", this.remetente);
            this.propriedades.setProperty("SERVIDORSMTP", servidorSmtp);
            this.propriedades.setProperty("USUARIOEMAIL", this.usuarioEmail);
            this.propriedades.setProperty("SENHAEMAIL", senhaCriptografada); 
            this.propriedades.setProperty("PORTA", this.porta);
            this.propriedades.setProperty("TLS", this.tls);
            this.propriedades.setProperty("SSL", this.ssl);

            PropertiesFabrica.salvaPropertiesJsf(this.propriedades, ARQUIVO);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro alterado com sucesso!", ""));
        }
        catch(Exception e) {
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível alterar os dados! Erro: "+e.getMessage(),""));
        }
    }

    public void salvarConfiguracaoTermo() throws FabricaDAOException
    {
        try
        {
            this.propriedades.setProperty("TERMO", this.termo);
            PropertiesFabrica.salvaPropertiesJsf(this.propriedades, ARQUIVO);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro alterado com sucesso!", ""));
        }
        catch(Exception e) {
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível alterar os dados! Erro: "+e.getMessage(), ""));
        }
    }
    
    public void salvarConfiguracaoAvisos() throws FabricaDAOException
    {
        try
        {
            this.propriedades.setProperty("AVISOS", this.avisos);
            PropertiesFabrica.salvaPropertiesJsf(this.propriedades, ARQUIVO);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro alterado com sucesso!", ""));
        }
        catch(Exception e) {
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível alterar os dados! Erro: "+e.getMessage(), ""));
        }
    }
    
    public void salvarConfiguracaoOMSecao() throws FabricaDAOException
    {
        try
        {
            this.propriedades.setProperty("NOMEOM", this.nomeOM);
            this.propriedades.setProperty("NOMEOMSIGLA", this.siglaOM);
            this.propriedades.setProperty("ENDERECOOM", this.enderecoOM);
            this.propriedades.setProperty("NOMESECAOTI", this.nomeSecaoTI);
            this.propriedades.setProperty("TELEFONESECAOTI", this.telTI);
            this.propriedades.setProperty("NOMESECAOSTS", this.nomeSecaoSTS);
            this.propriedades.setProperty("ENDERECOSTS", this.enderecoSTS);
            this.propriedades.setProperty("TELEFONESECAOSTS", this.telSTS);
            PropertiesFabrica.salvaPropertiesJsf(this.propriedades, ARQUIVO);
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cadastro alterado com sucesso!", ""));
        }
        catch(Exception e) {
            FacesUtil.getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi possível alterar os dados! Erro: "+e.getMessage(), ""));
        }
    }

    public String getPorta() {
        return this.propriedades.getProperty("PORTA");
    }

    public void setPorta(String porta) {
        this.porta = porta;
    }

    public String getServidorSmtp() {
        return this.propriedades.getProperty("SERVIDORSMTP");
    }

    public void setServidorSmtp(String servidorSmtp) {
        this.servidorSmtp = servidorSmtp;
    }

    public String getSenhaEmail() 
    {
        //String senhaDecriptografada = Encrypter.decriptar(Encrypter.CHAVE, this.propriedades.getProperty("SENHAEMAIL"));
        String senhaDecriptografada = this.encriptaSenha.decifrar(this.propriedades.getProperty("SENHAEMAIL"));
        return senhaDecriptografada;
    }

    public void setSenhaEmail(String senhaEmail) {
        this.senhaEmail = senhaEmail;
    }

    public String getRemetente() {
        return this.propriedades.getProperty("REMETENTE");
    }

    public void setRemetente(String remetente) {
        this.remetente = remetente;
    }

    public String getNomeRemetente() {
        return this.propriedades.getProperty("NOMEREMETENTE");
    }

    public void setNomeRemetente(String nomeRemetente) {
        this.nomeRemetente = nomeRemetente;
    }

    public String getTls() {
        return this.propriedades.getProperty("TLS");
    }

    public void setTls(String tls) {
        this.tls = tls;
    }

    public String getSsl() {
        return this.propriedades.getProperty("SSL");
    }

    public void setSsl(String ssl) {
        this.ssl = ssl;
    }

    public String getUsuarioEmail() {
        return this.propriedades.getProperty("USUARIOEMAIL");
    }

    public void setUsuarioEmail(String usuarioEmail) {
        this.usuarioEmail = usuarioEmail;
    }

    public String getTermo() {
        return this.propriedades.getProperty("TERMO");
    }

    public void setTermo(String termo) {
        this.termo = termo;
    }

    public String getAvisos() {
        return this.propriedades.getProperty("AVISOS");
    }

    public void setAvisos(String avisos) {
        this.avisos = avisos;
    }

    public String getNomeOM() {
        return this.propriedades.getProperty("NOMEOM");
    }

    public void setNomeOM(String nomeOM) {
        this.nomeOM = nomeOM;
    }

    public String getSiglaOM() {
        return this.propriedades.getProperty("NOMEOMSIGLA");
    }

    public void setSiglaOM(String siglaOM) {
        this.siglaOM = siglaOM;
    }

    public String getEnderecoOM() {
        return this.propriedades.getProperty("ENDERECOOM");
    }

    public void setEnderecoOM(String enderecoOM) {
        this.enderecoOM = enderecoOM;
    }

    public String getNomeSecaoTI() {
        return this.propriedades.getProperty("NOMESECAOTI");
    }

    public void setNomeSecaoTI(String nomeSecaoTI) {
        this.nomeSecaoTI = nomeSecaoTI;
    }

    public String getTelTI() {
        return this.propriedades.getProperty("TELEFONESECAOTI");
    }

    public void setTelTI(String telTI) {
        this.telTI = telTI.replace("(", "").replace(")", "").replace("-", "");
    }

    public String getNomeSecaoSTS() {
        return this.propriedades.getProperty("NOMESECAOSTS");
    }

    public void setNomeSecaoSTS(String nomeSecaoSTS) {
        this.nomeSecaoSTS = nomeSecaoSTS;
    }

    public String getEnderecoSTS() {
        return this.propriedades.getProperty("ENDERECOSTS");
    }

    public void setEnderecoSTS(String enderecoSTS) {
        this.enderecoSTS = enderecoSTS;
    }

    public String getTelSTS() {
        return this.propriedades.getProperty("TELEFONESECAOSTS");
    }

    public void setTelSTS(String telSTS) {
        this.telSTS = telSTS.replace("(", "").replace(")", "").replace("-", "");
    }

    public Boolean getHabilitaBotaoSalvar() 
    {
        ContextoBean contextoBean = ContextoUtil.getContextoBean();
        String permissao = contextoBean.getUsuarioLogado().getPermissao();

        if (permissao.equals("ROLE_ADMINISTRADOR")) {
            this.setHabilitaBotaoSalvar(false);
        }
        else {
            this.setHabilitaBotaoSalvar(true);
        }
        return habilitaBotaoSalvar;
    }

    public void setHabilitaBotaoSalvar(Boolean habilitaBotaoSalvar) {
        this.habilitaBotaoSalvar = habilitaBotaoSalvar;
    }

    public String getSeqNup() {
        return this.propriedades.getProperty("SEQUENCIALNUP");
    }

    public void setSeqNup(String seqNup) {
        this.seqNup = seqNup;
    }

    public String getSiglaNup() {
        return this.propriedades.getProperty("SIGLANUP");
    }

    public void setSiglaNup(String siglaNup) {
        this.siglaNup = siglaNup;
    }

    public String getAnoNup() {
        return this.propriedades.getProperty("ANONUP");
    }

    public void setAnoNup(String anoNup) {
        this.anoNup = anoNup;
    }

    public String getSeqNupHap() {
        return this.propriedades.getProperty("SEQUENCIALNUPHAP");
    }

    public void setSeqNupHap(String seqNupHap) {
        this.seqNupHap = seqNupHap;
    }

    public String getSiglaNupHap() {
        return this.propriedades.getProperty("SIGLANUPHAP");
    }

    public void setSiglaNupHap(String siglaNupHap) {
        this.siglaNupHap = siglaNupHap;
    }

    public String getAnoNupHap() {
        return this.propriedades.getProperty("ANONUPHAP");
    }

    public void setAnoNupHap(String anoNupHap) {
        this.anoNupHap = anoNupHap;
    }
}